<?php
class Icon
{
	public $Name;
	public $FileName;
	public $New;
	public $RotateAngle;
    public $Metaphor;

	public function Icon($fileName, $angle)
	{
		$this->FileName = $fileName;
		$this->Name = basename($fileName, ".png");
		$this->New = false;
        $this->Metaphor = false;
		$this->RotateAngle = $angle;
	}

	/**
	 * Переворачивает картунку на заданный угол. Градус угла должен быть кратен 90
	 * @static
	 * @param  $angle Угол поворота (0, 90, 180, 270, -90)
	 * @param  $image Поворачиваемое изображение
	 * @return resource Повернутое изображение
	 */
	private static function RotateImage($angle, $image)
	{
		// Отрабатываем строковые представления угла
		if ('left' === $angle)
		{
			$angle = 90;
		} elseif ('right' === $angle)
		{
			$angle = -90;
		}

		// Если угол кратен 90
		if (0 !== $angle && // Если угол не задан - пропускаем
		    0 !== $angle % 360 && // Если поворота нет - пропускаем
		    0 === $angle % 90 // Если кратен 90 - выполняем поворот
		)
		{
			$image = imagerotate($image, $angle, 0);
		}
		return $image;
	}

	public function __get($fieldName)
	{
		global $CONFIG;
		switch ($fieldName)
		{
			case 'Image':
				$image = imagecreatefrompng($this->FileName);
				return Icon::RotateImage($this->RotateAngle, $image);
				break;
			case 'JoinedImage':
				$fileName16 = $CONFIG['Pathes']['Icons'] . $CONFIG['Mode_16']['Folder'] . $this->Name . ".png";

				$img16 = Icon::RotateImage(
					$this->RotateAngle,
					@imagecreatefrompng($fileName16)
				);
				$img32 = Icon::RotateImage(
					$this->RotateAngle,
					@imagecreatefrompng($this->FileName)
				);


				$result = imagecreatetruecolor(16 + 32 + $CONFIG['Common']['VerticalSpace'] * 2, 32);
				$transparent = imagecolorexactalpha($result, 255, 255, 255, 127);
				imagefill($result, 1, 1, $transparent);

				@imagecopy($result, $img16,
				           0, 8, // Координаты куда вставлять
				           0, 0, // Координаты начала вставляемой области внутри иконки
				           16, 16); // Координаты конца вставляемой области внутри иконки
				@imagecopy($result, $img32,
				           16 + $CONFIG['Common']['VerticalSpace'] * 2, 0, // Координаты куда вставлять
				           0, 0, // Координаты начала вставляемой области внутри иконки
				           32, 32); // Координаты конца вставляемой области внутри иконки

				return $result;
				break;
			default:
				return null;
				break;
		}
	}
}